perm filename BREAK.RNO[IL,LSP] blob
sn#155499 filedate 1975-04-19 generic text, type T, neo UTF8
.F.J
.LC.CS.SS
.NPB1.PP
1↑40.↑40
.UC.C
DEBUGGING FACILITIES
.SP2
.UL
↑INTRODUCTION
.SP
↑DEBUGGING A COLLECTION OF ↑-LISP↑- FUNCTIONS INVOLVES ISOLATING
PROBLEMS WITHIN PARTICULAR FUNCTIONS AND/OR DETERMINING
WHEN AND WHERE INCORRECT DATA ARE BEING GENERATED AND TRANSMITTED.
IN THE ↑-UCI LISP↑- SYSTEM, THERE ARE FIVE FACILITIES
WHICH AID THE USER IN
MONITORING HIS PROGRAM. ONE OF THESE IS THE ↑ERROR ↑PACKAGE
WHICH TAKES CONTROL WHENEVER AN ERROR OCCURS IN A PROGRAM AND
WHICH ALLOWS THE USER TO EXAMINE THE STATE OF THE
WORLD (SEE SECTION ON '↑-ERROR PACKAGE↑-').
ANOTHER FACILITY ALLOWS THE USER TO TEMPORARILY INTERRUPT
HIS COMPUTATION AND EXAMINE ITS PROGRESS.
THE OTHER THREE FACILITIES
(↑-BREAK↑-, ↑-TRACE↑- AND ↑-BREAKIN↑-)
ALLOW THE USER TO (TEMPORARILY) MODIFY SELECTED FUNCTION DEFINITIONS SO
THAT HE CAN FOLLOW THE FLOW OF CONTROL IN HIS PROGRAMS.
ALL OF THESE FACILITIES USE THE SAME SYSTEM FUNCTION,
↑-BREAK1↑-, AS THE USER INTERFACE.
.SP
↑-BREAK↑-, ↑-BREAKIN↑- AND ↑-TRACE↑- TOGETHER
ARE CALLED THE ↑BREAK ↑PACKAGE.
↑-BREAK↑- AND ↑-TRACE↑-
CAN BE USED ON COMPILED AND
SYSTEM FUNCTIONS AS WELL AS ↑-EXPR↑-'S, ↑-FEXPR↑-'S AND ↑-MACRO↑-'S.
↑-BREAKIN↑- CAN BE USED ONLY WITH INTERPRETED FUNCTIONS.
.SP
↑-BREAK↑- MODIFIES THE DEFINITION OF A FUNCTION ↑-FN↑-,
SO THAT IF A BREAK CONDITION (DEFINED BY THE USER) IS SATISIFIED, THE
PROCESS IS HALTED TEMPORARILY ON A CALL TO ↑F↑N. THE USER
CAN THEN INTERROGATE THE STATE OF THE MACHINE, PERFORM ANY COMPUTATIONS,
AND CONTINUE OR RETURN FROM THE CALL.
.SP
↑-TRACE↑- MODIFIES A DEFINITION OF A FUNCTION ↑F↑N SO THAT WHENEVER ↑F↑N
IS CALLED, ITS ARGUMENTS (OR SOME OTHER VALUES SPECIFIED
BY THE USER) ARE PRINTED. WHEN THE VALUE OF ↑F↑N IS COMPUTED IT IS PRINTED
ALSO.
.SP
↑-BREAKIN↑- ALLOWS THE USER TO INSERT A BREAKPOINT ↑←INSIDE↑←
AN EXPRESSION DEFINING A FUNCTION. WHEN THE BREAKPOINT IS
REACHED AND IF A BREAK CONDITION (DEFINED BY THE USER)
IS SATISFIED, A TEMPORARY HALT OCCURS
AND THE USER CAN AGAIN INVESTIGATE THE STATE OF THE COMPUTATION.
.SP
THE TWO EXAMPLES ON PAGES 1.3 AND 1.4 ILLUSTRATE THESE FACILITIES.
IN THE FIRST EXAMPLE, THE USER TRACES THE FUNCTION
↑-FACTORIAL↑-. ↑-TRACE↑- REDEFINES ↑-FACTORIAL↑- SO THAT
IT CALLS ↑-BREAK1↑- IN SUCH A WAY THAT IT PRINTS SOME
INFORMATION, IN THIS CASE THE ARGUMENTS AND VALUE
OF ↑-FACTORIAL↑-, AND THEN GOES ON WITH THE COMPUTATION.
WHEN AN ERROR OCCURS ON THE FIFTH RECURSION, ↑-BREAK1↑- REVERTS
TO INTERACTIVE MODE, AND A FULL BREAK OCCURS. THE SITUATION
IS THEN THE SAME AS THOUGH THE USER HAD ORIGINALLY PERFORMED
↑-(BREAK FACTORIAL)↑- INSTEAD OF ↑-(TRACE FACTORIAL)↑-,
AND THE USER CAN EVALUATE VARIOUS ↑-LISP↑- FORMS AND
DIRECT THE COURSE OF THE COMPUTATION. IN THIS CASE, THE
USER EXAMINES THE VARIABLE ↑N, INSTRUCTS ↑-BREAK1↑- TO CHANGE
↑L TO 1 AND CONTINUE.
THE > COMMAND, FOLLOWING AN ↑-UNBOUND ATOM↑- OR ↑-UNDEFINED FUNCTION↑- ERROR,
TELLS ↑-BREAK1↑- TO USE THE NEXT EXPRESSION INSTEAD OF THE
ATOM WHICH CAUSED THE ERROR.
THE > COMMAND DOES A DESTRUCTIVE REPLACEMENT OF,
IN THIS CASE, 1 FOR ↑L, AND SAVES AN EDIT STEP BY CORRECTING THE
TYPO IN THE FUNCTION DEFINITION. THE REST OF THE TRACING PROCEEDS WITHOUT INCIDENT.
THE FUNCTION ↑-UNTRACE↑- RESTORES ↑-FACTORIAL↑- TO ITS
ORIGINAL DEFINITION.
.SP
IN THE SECOND EXAMPLE, THE USER HAS WRITTEN ↑ACKERMANN'S
FUNCTION. HE THEN USES ↑-BREAK↑- TO PLACE A CALL TO ↑-BREAK1↑-
AROUND THE BODY OF THE FUNCTION. HE INDICATES THAT ↑-ACK↑-
IS TO BE BROKEN WHEN ↑M EQUALS ↑N AND
THAT BEFORE THE BREAK OCCURS, THE ARGUMENTS TO ↑-ACK↑- ARE TO
BE PRINTED. WHILE CALCULATING ↑-(ACK 2 1)↑-, ↑-ACK↑-
IS CALLED TWICE WHEN ↑M = ↑N. DURING THE FIRST OF THESE
BREAKS, THE USER PRINTS OUT A BACKTRACE OF THE FUNCTION
NAMES AND VARIABLE BINDINGS. HE CONTINUES THE COMPUTATION
WITH A ↑G↑O WHI